package com.wms.ymcc.constant;

import lombok.Getter;

/**
 * @author : 阿盛哟
 * @description :全局异常处理常量
 * @createDate : 2025/5/28 20:56
 */
@Getter
public enum GlobalExceptionConstants {

    /**
     * 用户认证异常
     */
    // 相当于new GlobalBaseException("程序员正在赶来修复的路上", "10000")
    New_MA("程序员正在赶来修复的路上",  "10000"),


    USER_NOT_EXIST("用户不存在", "20001"),
    USER_PASSWORD_ERROR("用户密码错误", "20002"),
    USER_NOT_LOGIN("用户未登录", "20003"),
    USER_NOT_PERMISSION("您对此无访问权限，请联系超级管理员", "20004"),
    USER_NOT_ROLE("用户无角色", "20005"),
    USER_NOT_LOGOUT("用户未登出", "20006"),
    USER_NOT_LOGIN_OUT("用户未登出", "20007"),
    AUTH_TOKEN_EXPIRED("令牌已过期", "20008"),
    AUTH_TOKEN_INVALID("无效的令牌", "20009"),
    AUTH_ACCESS_DENIED("访问被拒绝", "20010"),
    AUTH_SIGNATURE_ERROR("签名验证失败", "20011"),
    AUTH_UNSUPPORTED_TOKEN("不支持的令牌类型", "20012"),

    /**
     * 系统运行时异常
     * 用于处理服务器内部错误、空指针、非法参数等通用异常：
     */
    SYSTEM_INTERNAL_ERROR("系统内部异常，请稍后重试", "30000"),
    SYSTEM_NULL_POINTER("空指针异常", "30001"),
    SYSTEM_ILLEGAL_ARGUMENT("非法参数异常", "30002"),
    SYSTEM_CLASS_CAST("类型转换异常", "30003"),
    SYSTEM_IO_ERROR("IO 操作异常", "30004"),
    SYSTEM_NETWORK_ERROR("网络连接异常", "30005"),

    /**
     * 数据访问层异常
     * 用于数据库操作失败或数据状态不一致等情况：
     */
    DATA_NOT_FOUND("请求的数据不存在", "40001"),
    DATA_ALREADY_EXISTS("数据已存在", "40002"),
    DATA_OPERATION_FAILED("数据操作失败", "40003"),
    DATA_LOCKED("数据已被锁定，请稍后再试", "40004"),
    DATA_VALIDATE_FAILED("数据校验失败", "40005"),

    /**
     * 接口调用相关异常
     * 用于服务间通信或第三方 API 调用失败的情况
     */
    RPC_CALL_FAILED("远程服务调用失败", "50001"),
    RPC_TIMEOUT("远程服务调用超时", "50002"),
    RPC_SERVICE_UNAVAILABLE("远程服务不可用", "50003"),
    RPC_PARAM_VALIDATE_FAILED("远程调用参数校验失败", "50004"),

    /**
     * 文件上传相关异常
     * 用于文件上传失败的情况
     */
    FILE_UPLOAD_FAILED("文件上传失败", "60001"),
    FILE_DOWNLOAD_FAILED("文件下载失败", "60002"),
    FILE_NOT_FOUND("文件不存在", "60003"),
    FILE_SIZE_EXCEEDED("文件大小超出限制", "60004"),
    FILE_TYPE_NOT_SUPPORTED("文件类型不支持", "60005"),

    /**
     * 业务逻辑异常
     */
    BUSINESS_RULE_VIOLATION("违反业务规则", "70001"),
    BUSINESS_STOCK_SHORTAGE("库存不足", "70002"),
    BUSINESS_ORDER_PROCESSING_ERROR("订单处理异常", "70003");


    private final String message;
    private final String code;

    /**
     * 构造器
     * @param message
     * @param code
     */
    GlobalExceptionConstants(String message, String code) {
        this.message = message;
        this.code = code;
    }

}
